Computing systems, such as the personal computer (PC), are increasingly being used for recording and playing back of streaming audio. One such application is network telephony in which users of respective PCs can talk to one another over a packet switched network, much as a telephone user talks to another telephone user over a circuit switched network. One such network telephony application is a real time communications application (RTC), such as instant messaging. While the RTC is executing, each user speaks into a local microphone at a PC and hears the voice of the remote party on a local speaker.
A difficulty can arise in the RTC in that sounds being output at each PC can include an unpleasant echo. For instance, an echo can be heard when the remote voice being received at one PC is played out of the local speaker and then input into the local microphone. This results in the remote voice being output a second time at the local speaker which is heard as an echo.
Another difficulty can arise in the RTC in that sounds produced by one PC, such a beeps, clicks, and other audible cues produced by applications being executed, are input into the local microphone. These sounds, which are of importance only to the local user, are then transmitted over the network to the remote party where they are heard after being output at the remote speaker.
The foregoing two difficulties can be solved by an acoustic echo cancellation process (AEC) that is performed upon a mix of all of the audio streams that are to be output from a PC (e.g., the global output). AEC is one of many processes that can be performed upon audio streams using signal processing techniques. Some signal processing techniques can be performed by mechanisms that form parts of an operating system of a PC. Some of these operating system mechanisms are those that can be used for rendering (or playback) of audio streams and for capturing (or recording) of audio streams. Known operating system mechanisms used for rendering and capturing are completely separate and are often implemented in wholly independent systems. Moreover, known operating system mechanisms for signal processing, such as for AEC, are difficult to use and understand due to poor architecture.
Given the foregoing, it would be an advantage in the art to provide a simple and easily understood operating system mechanism to capture a mix of all audio streams that are to be output from a PC (e.g., the global output). When so captured, an application executing on a PC would be able to perform signal processing upon the global output so as to accomplish a desired acoustic result.